#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
  
/*
 * 传入一个字符串，格式要求如下：
 * ep: A2D3B4C1D2 
 * 那么将这个字符串解压的结果应为:AADDDBBBBCDD
 * 规则就是，必须满足，字符串的第一个是字母，可以大写也可以小写，第二个为数字，范围为1-9,解压的长度不得超过1000个字符。
 */


int main(void)  
{  
    char *str = "A9B9C9D9e9f9g9";  //待解压的字符串   
    int str_lenght = 0 ;  
    int  i;  
    static int count ;  
    char *p = NULL;  
    char ch ;  

    p = malloc(1000) ;   
	
    while(*str++ != '\0') //判断字符串有没有到最后一个字符伪0,如果到了，退出循环   
    {  
        str_lenght = atoi(str) ; //将字符串中的数字转换成整型，并返回给变量str_lenght   

         //为什么要做这一步呢？因为我考虑到*str++  
         //,其实指针的位置指向第二个字符，减一就是让它指向第一个字符   
        str-- ;   

        //申请了1000个byte的内存空间，用于存放解压出来的字符,不过这个地方稍微做得不够好  
        //如果串没那么大那就没有必要搞那么大的空间了，这里优化可以采用动态分配，用多少时分配多少。   
        while(count < 1000){  

            //这一步就是将获取到的字符串中的第一个数字，也就代表串中某个字符的个数   
            //然后赋值给分配的内存空间   
            for(i = 0 ; i < str_lenght ; i++){  
                p[count] =  *str ;  
        //这个count相当于数组的坐标,上面之所以定义成static类型是为了使count能够记住当前的位置  
        //以便下次从当前的位置+1后往后接着存放数据   
                count++;  
                  
            }  
            //做好这个步骤让指针的地址偏移+2,这时会偏移到下一个字符的位置去   
            str+=2;  
            break ;  
        }  
    }  

    printf("%s\n",p);//打印解压后的数据   
    free(p) ;//释放内存   

    return 0 ;  
}  